<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="inp">
    <button id="add-btn">新增</button>
    <button id="search-btn">查询</button>
    <ol></ol>

    <script>
        // 获取元素
        const inp = document.querySelector('#inp');
        const addBtn = document.querySelector('#add-btn');
        const searchBtn = document.querySelector('#search-btn');
        const ol = document.querySelector('ol');

        let idCounter = Number(localStorage.getItem('lastId')); // 有可能为null

        // 记录正在修改的索引
        let editingId = localStorage.getItem('lastEditingId'); // 有可能为null
        editingId = editingId === null ? -1 : editingId;

        // 初始化
        const userListStr = localStorage.getItem('userList'); // 有可能为null
        // 解析之前记录的字符串
        const userList = JSON.parse(userListStr) || [];
        // 返显
        render(userList);

        // 记录
        function record () {
            // 数据的序列化
            const userListStr = JSON.stringify(userList);
            // 记录数据
            localStorage.setItem('userList', userListStr);
            localStorage.setItem('lastId', idCounter);
            localStorage.setItem('lastEditingId', editingId);
        }

        // 渲染
        function render (users) {
            // 清空ol
            ol.innerHTML = '';
            for (const user of users) {
                const li = document.createElement('li');

                // 修改
                if (editingId === user.id) { // 修改中
                    console.log(user)
                    const editInp = document.createElement('input');
                    editInp.value = user.name;
                    li.appendChild(editInp);
                    const editOkBtn = document.createElement('button');
                    editOkBtn.innerText = '确认';
                    editOkBtn.addEventListener('click', () => {
                        // 1. 改数据
                        editingId = -1;
                        // editingItem找到的那个数组项(通过item.id找到的)
                        const editingItem = userList.find((item) => item.id === user.id);
                        editingItem.name = editInp.value;
                        // 1.1 记录数据
                        record();
                        // 2. 渲染
                        render(users);
                    });
                    li.appendChild(editOkBtn);
                } else { // 没修改中
                    li.innerText = user.name;
                    const editBtn = document.createElement('button');
                    editBtn.innerText = '修改';
                    editBtn.addEventListener('click', () => {
                        // 1. 改数据
                        editingId = user.id;
                        // 1.1 记录数据
                        record();
                        // 2. 渲染
                        render(users);
                    });
                    li.appendChild(editBtn);
                }

                // 删除按钮
                const delBtn = document.createElement('button');
                delBtn.innerText = '删除';
                delBtn.addEventListener('click', () => {
                    // 1. 改数据
                    // user是当前点击的数据
                    // 通过user.id找当前索引
                    const idx = userList.findIndex((item) => item.id === user.id);
                    userList.splice(idx, 1);
                    // 1.1 记录数据
                    record();
                    // 2. 渲染
                    render(userList);
                });
                li.appendChild(delBtn);

                ol.appendChild(li);
            }
        }

        // 新增按钮
        addBtn.addEventListener('click', () => {
            // 1. 操作数据
            userList.push({
                name: inp.value,
                id: idCounter++,
            });
            // 1.1 记录数据
            record();
            // 2. 渲染
            render(userList);
        });

        // 查询按钮
        searchBtn.addEventListener('click', () => {
            // 1. 改数据
            // arr.filter  arr.map  arr.concat 都是浅拷贝
            const showingUserList = userList.filter((item) => item.name.includes(inp.value));
            // 2. 渲染数据
            render(showingUserList);
        });

    </script>
</body>
</html>